package cn.bookcycle.requestroom.util;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 时间工具类
 *
 * @author liufenglin
 * @date 2018年3月20日
 */
public class TimeUtil {
	private static final Logger logger = LoggerFactory.getLogger(TimeUtil.class);
	
	/**
	 * 把分转为小时
	 * 
	 * @param minutes
	 * @return
	 */
	public static String minute2Hour(int minutes) {
		double value = (minutes + 0.0) / 60.0;
//		BigDecimal decimal = new BigDecimal(minutes + 0.0);
//		BigDecimal divisor = new BigDecimal(60.0);
		BigDecimal decimal = new BigDecimal(value);
		return String.valueOf(decimal.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
	}
	
	/**
	 * 将日期格式化
	 * @param date
	 * @return
	 */
	public static String formatDate(String date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
		SimpleDateFormat newSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		Date returnDate =null;
		try {
			returnDate = sdf.parse(date);
		} catch (ParseException e) {
			returnDate = new Date();
			logger.warn("formatDate 解析字符串异常！！！！！");
		}
		return newSdf.format(returnDate);
	}
	
	/**
	 * 判断看房去权限状态是否有效
	 * 
	 * @param date 开始时间 格式例子：201808081430
	 * @param duration 持续时间，单位分
	 * @return
	 */
	public static boolean judgeCheckAuthorizatiionStatus(String date, int duration) {
		SimpleDateFormat spf = new SimpleDateFormat("yyyyMMddHHmm");
		Calendar rightNow = Calendar.getInstance();
		// 当前时间
		Date nowDate = new Date();
		// 起始时间
		Date startDate = null;
		try {
			startDate = spf.parse(date);
		} catch (ParseException e) {
			startDate = new Date();
			logger.warn("日期解析异常");
		}
		long now = nowDate.getTime() / (1000 * 60 ); 
		long start = startDate.getTime() / (1000 * 60 );
		// 时间分钟差
		long minutes = (now - start);
		long durationLong = duration;
		if (minutes >= 0 && minutes <= durationLong) {
			return true;
		}
		return false;
	}
	
	/**
	 * 对一个时间串（24小时制，精确到分）加上一段时间（单位：分钟）
	 * 
	 * @param startDateStr 起始时间，24小时制，精确到分
	 * @param minutes 增加的时间，单位分钟
	 * @return
	 */
	public static String addMinutes(String startDateStr, int minutes) {
		SimpleDateFormat spf = new SimpleDateFormat("yyyyMMddHHmm");
		Date satrtDate = null;
		try {
			satrtDate = spf.parse(startDateStr);
		} catch (ParseException e) {
			logger.info("addMinutes，解析时间字符串出现异常！！！");
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(satrtDate);
		calendar.add(Calendar.MINUTE, minutes);
		Date endDate = calendar.getTime();
		return spf.format(endDate);
		
	}
	
	/**
	 * 比较两个时间的大小
	 * 比较规则：时间越晚就越大
	 * 
	 * @param dateLaterStr 24小时制，精确到分的时间串
	 * @param dateBeforeStr 24小时制，精确到分的时间串
	 * @return 如果dateLaterStr > dateBeforeStr，则返回true；dateLaterStr <= dateBeforeStr，则返回false
	 */
	public static boolean compareDate(String dateLaterStr, String dateBeforeStr) {
		boolean result = false;
		SimpleDateFormat spf = new SimpleDateFormat("yyyyMMddHHmm");
		Date dateLater = null;
		Date dateBefore = null;
		try {
			dateLater = spf.parse(dateLaterStr);
			dateBefore = spf.parse(dateBeforeStr);
		} catch (ParseException e) {
			logger.info("compareDate比较两个时间的大小,解析时间字符串出现异常！！！");
		}
		if (dateLater.after(dateBefore)) {
			result = true;
		} else {}
		 
		return result;
	}
	
}
